package com.neu.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class JwtUtils {

    // 使用 Keys.secretKeyFor(SignatureAlgorithm.HS512) 来生成安全的密钥
    //缺点是每次重启服务都会生成一个新的密钥，导致之前生成的token失效
   // private  final Key key = Keys.secretKeyFor(SignatureAlgorithm.HS512);
    private String key="kgXvMyKheEJkgXvMyKheEJkgXvMyKheEJkgXvMyKheEJkgXvMyKheEJkgXvMyKheEJkgXvMyKheEJkgXvMyKheEJkgXvMyKheEJ";
    /**
     * 过期时间 单位是秒
     */
    private  Long expiration=180000000L;

    /**
     * 生成token
     * @param userId 用户名
     * @return token
     */
    public  String generateToken(String userId) {
        return Jwts.builder()
                .setSubject(userId)
                .signWith(SignatureAlgorithm.HS512, key)
                .setExpiration(new Date(System.currentTimeMillis() + expiration * 1000))
                .compact();
    }

    /**
     * 解析token
     */
    public  Claims getClaims(String token) {
        return Jwts.parser()
                .setSigningKey(key)
                .parseClaimsJws(token)
                .getBody();
    }

    /**
     * 判断token是否过期
     */
    public  boolean isTokenExpired(String token) {
        try {
            Date expiration = getClaims(token).getExpiration();
            return expiration.before(new Date());
        } catch (Exception e) {
            return true; // token解析失败，过期
        }
    }

    /**
     * 获取 Token 剩余有效时间（毫秒）
     * @param token
     * @return
     */
    public long getRemainingTime(String token) {
        try {
            Date expiration = getClaims(token).getExpiration();
            return expiration.getTime() - System.currentTimeMillis();
        } catch (Exception e) {
            return 0;
        }
    }
    public  Long getExpiration() {
        return expiration;
    }
}
